package jp.oesf.rss;

import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicBoolean;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
//import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;

public class RssService extends Service {

	AtomicBoolean running = new AtomicBoolean(false);

	@Override
	public IBinder onBind(Intent intent) {
		// TODO 自動生成されたメソッド・スタブ
		Log.v(getClass().getSimpleName(), "-->> onBind");
		return null;
	}
	@Override
	public void onStart(Intent intent, int startId) {
		// TODO 自動生成されたメソッド・スタブ

		//Serviceスレッド上の処理が実行中の場合
		//onStartは無視する
		if (true == running.get()){
			Log.v(getClass().getSimpleName(), "-->> onStart return!!");
			return;
		}

		running.set(true);
		Log.v(getClass().getSimpleName(), "-->> onStart");
		Log.v(getClass().getSimpleName(), "<<-- onStart");
		new ServiceThread().start();
	}

	@Override
	public void onDestroy() {
		// TODO 自動生成されたメソッド・スタブ
		running.set(false);
		Log.v(getClass().getSimpleName(), "-->> onDestroy");
		Log.v(getClass().getSimpleName(), "<<-- onDestroy");
	}

	class ServiceThread extends Thread {
		Handler handler = new Handler();

		@Override
		public void run() {

			// HttpClientManagerクラスへHTTP通信を依頼する
			HttpClientManager hcp = new HttpClientManager();
			String str = "";
			str = hcp.execute();
			if (str == null){
				handler.post(new Runnable() {
					@Override
					public void run() {
						// TODO 自動生成されたメソッド・スタブ
						Toast.makeText(getApplicationContext(), "取得失敗 (HTTP通信NG)", Toast.LENGTH_LONG).show();
						//UIスレッド側でFlagOFF
						running.set(false);
					}
				});
				return;
			}

			// XmlHelperクラスへXMLの解析を依頼する
			XmlHelper xh = new XmlHelper();
			ArrayList<XmlRowModel> arr = new ArrayList<XmlRowModel>();

			boolean ret = true;
			ret = xh.parseXmlPullparser(str, arr);
			if (ret == false){
				handler.post(new Runnable() {
					@Override
					public void run() {
						// TODO 自動生成されたメソッド・スタブ
						Toast.makeText(getApplicationContext(), "取得失敗 (XML解析NG)", Toast.LENGTH_LONG).show();
						//UIスレッド側でFlagOFF
						running.set(false);
					}
				});
				return;
			}

			// DataBaseクラスへ取得データの登録を依頼する
			DataBase db = new DataBase(getApplicationContext());
			ret = true;
			ret = db.registerDataBase(arr);
			if (ret == false){
				handler.post(new Runnable() {
					@Override
					public void run() {
						// TODO 自動生成されたメソッド・スタブ
						Toast.makeText(getApplicationContext(), "取得失敗 (DB登録NG)", Toast.LENGTH_LONG).show();
						//UIスレッド側でFlagOFF
						running.set(false);
					}
				});
				return;
			}

			handler.post(new Runnable() {
				@Override
				public void run() {
					// TODO 自動生成されたメソッド・スタブ
					Toast.makeText(getApplicationContext(), "取得完了", Toast.LENGTH_LONG).show();
					//UIスレッド側でFlagOFF
					running.set(false);
				}
			});
		}
	}
}